题目描述
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
分析
[3, 30, 34, 5, 9]
排序成……
[9, 5, 34, 3, 30]
如何判断大小?对于每个元素,左边第一位大的在前面,如5>30。因为5的第一位是5是5,30的第一位是3。依次比较。
那么3应该比30大,因为3 + 30 = 330 ,而30 + 3 = 303。
所以本题可分为4步:
- 定义string数组,将int数组,转成string数组
- 对string数组按照定义的规则排序
- 如果strs第一个元素是“0”,则结果是0
- 连接strs数组成字符串,即为结果
代码
public static String largestNumber(int[] nums) {
String[] strs = new String[nums.length];
// 将int数组,转成string数组
for (int i = 0; i < strs.length; i++) {
strs[i] = nums[i] + "";
}
// 对strs排序
Arrays.sort(strs, new Comparator<String>() {
public int compare(String x, String y) {
return (y + x).compareTo(x + y);
}
});
// 如果strs第一个元素是“0”,则结果是0
if ("0".equals(strs[0])) {
return "0";
}
// 连接strs数组成字符串
return String.join("", strs);
}